home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Utilities / Other / mCD / Source / scsi_cd.subproj / scsi_commands.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-19  |  3.6 KB  |  158 lines

  1. /*
  2.  * scsi_commands.h: header file for scsi_command.c
  3.  *
  4.  * History
  5.  * -------
  6.  * Tue Sep  3 15:00:13 PDT 1991 James C. Lee at NeXT
  7.  *  Created (copied a lot of data structures & functions calls from
  8.  *   perftest.c by Mike DeMoney)
  9.  */
  10.  
  11. #ifndef SCSI_COMMANDS
  12. #define SCSI_COMMANDS
  13.  
  14. #import <sys/time.h>
  15. #import <bsd/dev/disk.h>
  16. #import <sys/types.h>
  17.  
  18. /* I use a copy of the NS-3.1 version of bsd/dev/scsireg.h, because
  19.  * at some point I think I want to split it apart into "field values"
  20.  * (such as #define DEVTYPE_DISK), and actual structure definitions.
  21.  */
  22. /* #import <bsd/dev/scsireg.h> */
  23. #import "scsireg_31.h"        /* garance... */
  24.  
  25. #define Version "0.00"
  26.  
  27.  
  28. struct mode_sense_cmd {
  29.     u_int    msc_opcode:8,
  30.         msc_lun:3,
  31.         msc_mbz1:5,
  32.         msc_pcf:2,
  33.         msc_page:6,
  34.         msc_mbz2:8;
  35.     u_char    msc_len;
  36.     u_char    msc_ctrl;
  37. };
  38.  
  39. struct param_list_header {
  40.     u_char    plh_len;
  41.     u_char    plh_medium;
  42.     u_char    plh_wp:1,
  43.         plh_reserved:7;
  44.     u_char    plh_blkdesclen;
  45. };
  46.  
  47. struct block_descriptor {
  48.     u_int    bd_density:8,
  49.         bd_nblk:24;
  50.     u_int    bd_reserved:8,
  51.         bd_blklen:24;
  52. };
  53.  
  54. struct device_format_params {
  55.     u_char    dfp_savable:1,
  56.         dfp_reserved:1,
  57.         dfp_pagecode:6;
  58.     u_char    dfp_pagelen;
  59.     u_short    dfp_trkszone;
  60.     u_short    dfp_altsecszone;
  61.     u_short    dfp_alttrkszone;
  62.     u_short    dfp_alttrksvol;
  63.     u_short    dfp_sectors;
  64.     u_short    dfp_bytessector;
  65.     u_short    dfp_interleave;
  66.     u_short    dfp_trkskew;
  67.     u_short    dfp_cylskew;
  68.     u_char    dfp_ssec:1,
  69.         dfp_hsec:1,
  70.         dfp_rmb:1,
  71.         dfp_surf:1,
  72.         dfp_reserved2:4;
  73.     u_char    dfp_reserved3;
  74.     u_char    dfp_reserved4;
  75.     u_char    dfp_reserved5;
  76. };
  77.  
  78. struct rigid_drive_params {
  79.     u_char    rdp_savable:1,
  80.         rdp_reserved:1,
  81.         rdp_pagecode:6;
  82.     u_char    rdp_pagelen;
  83.  
  84.     u_char    rdp_maxcylmsb;
  85.     u_char    rdp_maxcylinb;
  86.     u_char    rdp_maxcyllsb;
  87.  
  88.     u_char    rdp_maxheads;
  89.  
  90.     u_char    rdp_wpstartmsb;
  91.     u_char    rdp_wpstartinb;
  92.     u_char    rdp_wpstartlsb;
  93.  
  94.     u_char    rdp_rwcstartmsb;
  95.     u_char    rdp_rwcstartinb;
  96.     u_char    rdp_rwcstartlsb;
  97.  
  98.     u_char    rdp_stepratemsb;
  99.     u_char    rdp_stepratelsb;
  100.  
  101.     u_char    rdp_landcylmsb;
  102.     u_char    rdp_landcylinb;
  103.     u_char    rdp_landcyllsb;
  104.  
  105.     u_char    rdp_reserved2;
  106.     u_char    rdp_reserved3;
  107.     u_char    rdp_reserved4;
  108. };
  109.  
  110. #define    THREE_BYTE(x)    \
  111.         (((x##msb)<<16)|((x##inb)<<8)|(x##lsb))
  112.  
  113. #define    TWO_BYTE(x)    \
  114.         (((x##msb)<<8)|(x##lsb))
  115.  
  116. struct mode_sense_reply {
  117.     struct param_list_header msr_plh;
  118.     struct block_descriptor msr_bd;
  119.     union {
  120.         struct device_format_params u_msr_dfp;
  121.         struct rigid_drive_params u_msr_rdp;
  122.     }u;
  123. };
  124.  
  125. /* two variables for about the same thing, just so references to
  126.  * the number are clear about which number they really mean.
  127.  */
  128. #define INQ_ALL_MAX_SCSI_ID   7        /* SCSI ID's are 0 to 7 */ 
  129. #define INQ_ALL_MAX_SCSI_CNT  8        /* so there are 8 of them */
  130.  
  131. struct inquiry_all_entry {
  132.     int    devIoStat;        /* copy of sr_io_status */
  133.     int    deviceNumber;        /* ie, the 0 in "sd0" */
  134.     struct    inquiry_reply inqResult;
  135. };
  136. struct inquiry_all_reply {
  137.     int    maxScsiCount;        /* note: max scsi count */
  138.     struct inquiry_all_entry  scsiArray[INQ_ALL_MAX_SCSI_CNT];
  139. };
  140.  
  141. /* C functions */
  142. void fatal(const char *msg, ...);
  143. int do_inquiry(int fd, struct inquiry_reply *irp, struct esense_reply *erp);
  144. int do_inquiryall(int replyCount, struct inquiry_all_reply *all,
  145.     struct esense_reply *erp);
  146. int do_testunitready(int fd, struct timeval *tvp, struct esense_reply *erp);
  147. int do_modesense(int fd, struct mode_sense_reply *msrp, int page,
  148.     struct esense_reply *erp);
  149. int do_readcapacity(int fd, struct capacity_reply *crp,
  150.     struct esense_reply *erp);
  151. int do_seek(int fd, int lba, struct timeval *tvp, struct esense_reply *erp);
  152. int do_read(int fd, int lba, int nblks, struct timeval *tvp,
  153.     struct esense_reply *erp);
  154. int do_write(int fd, int lba, int nblks, struct timeval *tvp,
  155.     struct esense_reply *erp);
  156.  
  157. #endif    /* #ifndef SCSI_COMMANDS */
  158.